package com.fosu.service;

import com.alibaba.fastjson.JSONObject;
import com.fosu.common.ResponseResult;
import com.fosu.domain.Product;
import com.fosu.vo.MiniProduct;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.ResultMap;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import javax.security.auth.message.callback.PrivateKeyCallback;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * Desription
 *
 * @author manno
 * @date 2020/10/21
 */
public interface ProductService
{
    /**获得最新的20条商品信息
     * @param resp Servlet响应对象
     * @param currentPage 当前页数
     * @param pageSize 页面大小
     * @return ResponseResult 响应结果
     * @throws Exception*/
    ResponseResult getProducts(HttpServletResponse resp,int currentPage, int pageSize) throws Exception;;
    /**根据商品id查找商品
     * @param productId 商品id
     * @return Product 商品实体类对象
     * @throws Exception*/
    ResponseResult findProductById(HttpServletResponse resp,int productId) throws Exception;
    /**根据商品id区间查找商品
     * @param productIds 商品id区间
     * @return List<MiniProduct> 商品实体类集合
     * */
    List<MiniProduct> getProductsByIds(List<Integer> productIds);
    /**根据所选校区和分类查找商品
     * @param resp Servlet响应对象
     * @return ResponseResult 响应结果
     * @throws Exception*/
    ResponseResult getProductsByCampusAndCategories(HttpServletResponse resp, JSONObject jsonObject) throws Exception;


    /**根据字串查询
     * @param resp Servlet响应对象
     * @param jsonPram 搜索信息
     * @return ResponseResult 响应结果
     * @throws Exception
     */
    ResponseResult findMsgBySearch(HttpServletResponse resp,JSONObject jsonPram) throws Exception;

    /**根据字串查询更多结果
     * @param resp Servlet响应对象
     * @param jsonPram 搜索信息
     * @return ResponseResult 响应结果
     * @throws Exception
     */
    ResponseResult findMoreAboutMsg(HttpServletResponse resp,JSONObject jsonPram) throws Exception;

    /**根据校区查询更多结果
     * @param resp Servlet响应对象
     * @param jsonPram 搜索信息
     * @return ResponseResult 响应结果
     * @throws Exception
     */
    ResponseResult findMoreAboutCampus(HttpServletResponse resp,JSONObject jsonPram) throws Exception;

    /**根据分类查询更多结果
     * @param resp Servlet响应对象
     * @param jsonPram 搜索信息
     * @return ResponseResult 响应结果
     * @throws Exception
     */
    ResponseResult findMoreAboutCategories(HttpServletResponse resp,JSONObject jsonPram) throws Exception;

    /**根据自定义分类查询更多结果
     * @param resp Servlet响应对象
     * @param jsonPram 搜索信息
     * @return ResponseResult 响应结果
     * @throws Exception
     */
    ResponseResult findMoreAboutCustomizeCategories(HttpServletResponse resp,JSONObject jsonPram) throws Exception;

    /**查看收藏状态
     * @param resp Servlet响应对象
     * @param userId 用户id
     * @param productId 商品id
     * @return ResponseResult 响应结果
     * */
    ResponseResult findIsFavorite(HttpServletResponse resp,Integer userId, Integer productId);
    /**切换商品收藏状态
     * @param resp Servlet响应对象
     * @param userId 用户id
     * @param productId 商品id
     * @return ResponseResult 响应结果
     * */
    ResponseResult switchWhetherToFavorite(HttpServletResponse resp,Integer userId,Integer productId);

    /**获得用户发布的商品集合
     * @param resp Servlet响应对象
     * @param userId 用户id
     * @param currentPage 当前页数
     * @param pageSize 页大小
     * @return ResponseResult 响应结果
     */
    ResponseResult userReleased(HttpServletResponse resp
            ,Integer userId
            ,int currentPage
            ,int pageSize);


    /**查看商品今日内是否已被该用户浏览
     * 如果未被该用户浏览过就把浏览量+1
     * @param userId 当前正在浏览的用户id
     * @param productId 被浏览的商品id
     * @return ResponseResult 响应结果
     */
    ResponseResult addViewed(HttpServletResponse resp,Integer userId,Integer productId);


    /**
     * 根据用户id获取我想要的商品
     * @param resp
     * @param userId
     * @return
     */
    ResponseResult getFavoriteProductByUserId(HttpServletResponse resp, Integer userId,Integer currPage,Integer pageSize);

    /**
     * 根据用户id获取我想要的商品的数量
     * @param resp
     * @param userId
     * @return
     */
    ResponseResult getFavoriteProductCount(HttpServletResponse resp,Integer userId);


    /**下架商品
     * @param productId 要下架商品的id
     * @return ResponseResult 被下架商品的信息
     */
    ResponseResult offShelfProduct(HttpServletResponse resp,@Param("productId")Integer productId);
}
